use std::collections::HashSet;
-use std::io::{File, fs};
+use std::io::{mod, File, fs};
use std::io::fs::PathExtensions;
use core::{Package,Manifest,SourceId};
-use util::{mod, CargoResult, human};
+use util::{mod, CargoResult, human, CargoError};
use util::important_paths::find_project_manifest_exact;
use util::toml::{Layout, project_layout};
return Ok(());
}
- for dir in try!(fs::readdir(path)).iter() {
+ // Ignore any permission denied errors because temporary directories
+ // can often have some weird permissions on them.
+ let dirs = match fs::readdir(path) {
+ Ok(dirs) => dirs,
+ Err(ref e) if e.kind == io::PermissionDenied => return Ok(()),
+ Err(e) => return Err(e.box_error()),
+ };
+ for dir in dirs.iter() {
try!(walk(dir, false, |a, x| callback(a, x)))
}
}
-use std::io::{fs, TempDir, File};
+use std::io::{mod, fs, TempDir, File};
use std::os;
use std::path;
assert_that(foo.process(cargo_dir().join("cargo")).arg("build"),
execs().with_status(0).with_stdout(""));
})
+
+test!(ignore_bad_directories {
+ let foo = project("foo")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "foo"
+ version = "0.0.0"
+ authors = []
+ "#)
+ .file("src/lib.rs", "");
+ foo.build();
+ fs::mkdir(&foo.root().join("tmp"), io::USER_EXEC ^ io::USER_EXEC).unwrap();
+ assert_that(foo.process(cargo_dir().join("cargo")).arg("build"),
+ execs().with_status(0));
+})